import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false


import ElementUI from 'element-ui' //element-ui的全部组件
import 'element-ui/lib/theme-chalk/index.css'//element-ui的css
import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
Vue.use(ElementUI, { locale })


//使用axios
import axios from "axios";
// Vue.prototype.$ajax =Axios;
import VueAxios from "vue-axios"
//使用axios方法
// Vue.prototype.$axios = axios;
//使用vue-axios方法
Vue.use(VueAxios,axios) //使用VueAxios

//数据展示图形
import echarts from 'echarts'
Vue.prototype.$echarts = echarts

//token需要存到cookie中，因此需要引入cookie
import Cookies from 'js-cookie';
import {getMenu} from '@/api/login';
import {resetRouter} from '@/router/index';

// 路由判断登录 根据路由配置文件的参数
// router.beforeEach((to, from, next) => {
//   if (to.matched.some(record => record.meta.requireAuth)){ // 判断该路由是否需要登录权限
//     // console.log('需要登录');
//     if (Cookies.get('guli_token')) { // 判断当前的token是否存在 ； 登录存入的token
//       next();//放行
//     }else {
//       next({
//         path: '/admin/login',//跳转路径
//         // query: {redirect: to.fullPath} // 将跳转的路由path作为参数，登录成功后跳转到该路由
//       })
//     }
//   }else {
//    next();//放行
//   }
// });

//该路径拦截方法是不需要设置路由是否拦截，而是只有/login路由不拦截

let oneRun = true; //通过oneRun变量控制 避免陷入死循环
router.beforeEach((to,from,next)=>{
  if(to.path === '/login'){
    next();
  }else{
    if (Cookies.get('guli_token')) { // 判断当前的token是否存在 ； 登录存入的token
      if(oneRun){
        // 先动态获取动态路由后再放行
        createNewRouter();
        next();
      }
    }else{
      next({path: '/login'});
    }
  }
})

// 在放行前，加载出路由，防止刷新时没加载出路由导致404
function createNewRouter(){
  //请在这里做你登陆之后所做的创建动态路由的事情 一模一样去做。
  //获取菜单
  getMenu().then(res=>{
    console.log('菜单权限 == ',res.data.permissionList)
    // 到router.js中 将用户权限跟里面路由判断，返回用户拥有的路由权限
    let dynamicRoutes = resetRouter(res.data.permissionList);
    console.log("获取的 dynamicRoutes == ",dynamicRoutes)
    // 添加进router中（路由），
    if(dynamicRoutes)
      router.addRoutes(dynamicRoutes)
  })
  
}

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
